自然言語処理サービスの Amazon Comprehend についてまとめてみた #reinvent
ども、藤本です。
AWS re:Invent 2017 にて自然言語処理(Natural Language Processing)サービスの Amazon Comprehend がリリースされました。弊社ブログでも既にいくつか記事が取り上げられています。
- 【速報】AWSの自然言語処理サービス、Amazon Comprehendが発表されました! #reinvent
- Amazon ComprehendのAPI explorerを使ってみる #reinvent
- Amazon ComprehendのTopic modelingを使ってみる #reinvent
本エントリでは Amazon Comprehend をもう少し深掘りしてみます。
自然言語処理
Amazon Comprehend は自然言語処理サービスと記載しましたが、自然言語処理とは何でしょうか。普段私たちが使っている言葉(話している内容でも、書いている内容でも)が自然言語です。自然言語は人間にとっては今まで学んだことや経験から意味を理解することができますが、コンピュータには難しいです。自然言語をコンピュータに処理させる技術を自然言語処理と呼びます。
自然言語処理自体も多くの技術によって成り立っています。代表的なものをいくつかご紹介します。
- 形態素解析 文章を単語、品詞などに分解します。文章はコンピュータにとっては文字の羅列です。どこからどこまでの文字が意味のある単位なのかを解析します。
- 構文解析 文章の単語、品詞の関係性を解析します。品詞がどの品詞に係っているのかを解析します。
- 照応解析 照応詞の指示対象を推定します。「それ」や「あれ」、「彼」や「彼女」が何を指しているのか解析します。
詳しく知りたい方は以下の記事が非常に分かりやすくまとめられています。
Amazon Comprehend と自然言語処理
Amazon Comprehend は機械学習を活用して、自然言語処理を提供するサービスです。機械学習には Amazon.com の商品説明や、商品レビューなどの大規模なコーパスなど様々な情報源から学習しています。日々学習し、結果の精度を向上させています。
現状 Amazon Comprehend でできることは以下の通りです。
対応している言語
主要言語の検出機能 | 100言語(日本語含む) |
---|---|
その他検出機能 Topic Modeling | 英語、スペイン語 |
Entity の検出
単語、文章の集合(以下、ドキュメント)から Entity、および属するカテゴリを検出します。Entity は下記のカテゴリに属する単語、連語を指します。
Entity タイプ | 説明 | 例 |
---|---|---|
COMMERCIAL_ITEM | プロダクト名を検出します | Comprehend, RDS |
DATE | 日付や時刻を検出します | 2017/12/01, 12:34:56 |
EVENT | イベントに関するワードを検出します | Halloween, christmas |
LOCATION | 国名、地名などを検出します | Japan, Mt.Fuji |
ORGANIZATION | 会社名や、組織名を検出します | Amazon, Republican |
PERSON | 人名を検出します | Donald John Trump, Daisuke Sasaki |
QUANTITY | 数量を検出します | 115, one hundred fifteen |
TITLE | 創作物の名称を検出します | Star Wars |
OTHER | 上記に属さない Entity を検出します | Japanese |
また Entity の検出は単語で判断しているわけではなく、文脈によって判断されます。同じ単語も文脈によっては結果が変わることもあります。
マネジメントコンソールから見る例
マネジメントコンソールで Comprehend を開くと、デフォルトで入力されている文章からどのような結果が返るのか見てみましょう。
「Amazon.com, Inc.」、「Starbucks」といった会社名がORAGANIZATION
、「Seattle, WA」、「Portland」といった地名がLOCATION
として検出されています。またそれぞれに信頼性といった情報も付与されています。
キーフレーズの検出
ドキュメントから重要なフレーズを検出、抽出します。ドキュメントの特徴的な名詞を得ることができます。ドキュメント群から抽出したフレーズでカテゴライズできたり、検索キーワードとして活用したりできるのかな。
マネジメントコンソールから見る例
先ほどと同じ文章からどのような結果が返るのか見てみましょう。
先ほどと結果は似ていますが、キーフレーズは Entity とは若干異なる単語の抽出となっています。あくまでも分類されたフレーズの抽出と、ドキュメントの中で重要と思われるフレーズの抽出は目的が異なるので結果も異なります。
主要言語の検出
ドキュメントがどの言語で記載されているのか検出します。その他検出が英語、スペイン語の 2種類に対して、主要言語の検出は 100種類の言語に対応しています。日本語も含まれています。
マネジメントコンソールから見る例
先ほどと同じ文章からどのような結果が返るのか見てみましょう。
サンプルは英語なのでen
で検出されます。
日本語も検出できます。
感情の検出
ドキュメントがどのような感情で記載されているか検出します。下記4種類で結果を返します。
- 肯定的
- 否定的
- 混在
- 中立
エゴサしたくなりますね笑
マネジメントコンソールから見る例
先ほどと同じ文章からどのような結果が返るのか見てみましょう。
特に感情的な単語はないのでほぼ Neutral(中立)となっています。
ネガティブな文を入れてみます。
ネガティブの数値が高くなりました。
Topic Modeling
複数のドキュメントから LDA ベースの学習モデルを使用して、共通のトピックを判断することができます。例えば、「EC2 は秒単位で課金されるコンピュートサービスです」といったドキュメントから弊社ブログを読んでいる読者であれば、「AWS」という単語がなくとも AWS の話ということが判断できるかと思います。これはドキュメントに含まれる単語からトピックに関連付けて。ここでいう Topic はカテゴライズ、グルーピングのようなことを意味します。グループは特定の名称ではありません。Comprehend では数値の ID でグルーピングします。
Topic Modeling は S3 のドキュメント群を与えると 2つのファイルを生成します。
- 単語と Topic の関連付けた CSV ファイル
- 1行は Topic,Term,Weight の 3つの情報
- Topic はグループの ID
- Term はドキュメントから抽出された単語
- Weight は単語の重要度
- Topic とドキュメントの関連性評価した CSV ファイル
- 1行は Docname,Topic,Proportion の 3つの情報
- Docname はドキュメントのファイル名
- Topic は一つ目の CSV ファイルで抽出したグループの ID
- Proportion は関連度
サンプルから見る結果例
AWS が公開サンプルデータを S3(s3://public-sample-us-east-1/Sample.txt
)に用意しています。このファイルには物理学や高調波など難しい用語の Wikipedia の内容が一行づつ格納されています。サイズは行数が 606、単語数が 117,949件含まれています。このデータを使って Topic Modeling します。設定はデフォルトのまま、10 の Topic に分類します。
結果からどのように分類されたか確認してみましょう。
まずは単語と Topic の関連付けた CSV ファイルです。一つ目の Topic は下記のような単語が分類されました。
topic,term,weight 000,cognitive,0.0508213 000,human,0.0181545 000,process,0.019357 000,cognition,0.0115279 000,brain,0.0101779 000,mental,0.00838119 000,style,0.00786231 000,refer,0.00849239 000,learn,0.0105929 000,loar,0.00621534
人や行動に関する単語が分類されている気がします。
二つ目の Topic は下記のような単語が分類されました。
001,model,0.0637164 001,size,0.0197475 001,year,0.0223847 001,chrysler,0.0183622 001,full,0.0177853 001,generation,0.0162592 001,seriar,0.0155608 001,chevrolet,0.0149851 001,cadillac,0.0128545 001,produce,0.0126167
こっちは車に関することがまとめられています!!こっちは分かりやすい!
もう一方のTopic とドキュメントの関連性評価した CSV ファイルも確認します。
docname,topic,proportion Sample.txt:28,007,1.0 Sample.txt:63,006,1.0 Sample.txt:98,008,0.877854 Sample.txt:98,000,0.122146 Sample.txt:133,002,1.0 Sample.txt:168,000,1.0 Sample.txt:203,000,1.0 Sample.txt:238,000,1.0 Sample.txt:273,000,0.643693 Sample.txt:273,001,0.107316 Sample.txt:273,008,0.072461 Sample.txt:273,005,0.064356 Sample.txt:273,003,0.063804 <snip> Sample.txt:560,001,1.0 <snip>
docname
にはファイル名:行数で一件一件のドキュメントを表しています。どうせならTopic 001にマッチするドキュメントを見てみましょう。本当に車に関係しているのでしょうか?サンプルデータの 560 行目です。
The Cadillac Ciel is a hybrid electric concept car created by Cadillac and unveiled at the 2011 Pebble Beach Concours d'Elegance. The Cadillac Ciel has a twin-turbocharged 3.6-liter direct injection V6 producing 425 horsepower and a hybrid system using lithium-ion battery technology. The Ciel is a four-seat convertible with a wheelbase of 125 inches. The concept car was developed at GM Design's North Hollywood Design Center.The Ciel comes with rear suicide doors, and the interior features a smooth wooden dashboard with a simple gauge look. The word "Ciel" is French for "sky"- which is what the designers had in mind when they made the vehicle.In 2012 and early 2013, Cadillac contemplated developing a production car based on the Ciel. However, in July 2013, they decided not to pursue the venture. At the 2013 Pebble Beach Concours d'Elegance, Cadillac unveiled a new concept, the Cadillac Elmiraj, which is similar in design to the Ciel, except it is a coupe. Both vehicle's were designed by Niki Smart.
おー、キャデラック・シエルの Wikipedia の内容ですね。間違いなく車のドキュメントです。
利用者はテストデータを与えることもなく、モデルを調整する必要がなく、ドキュメント群を渡すだけで分類してくれました。
まとめ
いかがでしょうか? Comprehend は何やら面白そうなサービスですが、他のサービスと比べて、どこでどう活用するのか難しいサービスだな、と直感では感じました。もっと深掘りして色々なユースケースのブログを書いてみたいと思います。